Incredibuildを使ってUnrealEngine4のソースコードをビルドしてみた
最近のソフトウェア開発、特に家庭用コンソール向けゲーム機向けのソフトウェア開発が当てはまるのですが、ゲームの規模やアセット(画像や音楽など)のデータが増加の一途をたどってます。それに伴いビルドにかかる時間も長時間かかるようになってきました。
よくある事例としては次のような事が起こっていることでしょう。ソースコードのビルドに時間がかかるので、開発用PCにソースコードのフルビルドを仕掛けてから帰宅するのが日課となり、翌朝出社してビルド結果を確認するとビルドの途中でコケていることが分かり、しばし呆然とする...。
そんな長時間かかるビルド時間を短くする方法としては分散ビルドがあります。分散ビルドとはソースコードなどの1つのプロジェクトのビルドを複数のPCで行わせる方法です。単純にいうと複数のPCを束ねて1台の高速なPCと見立てて処理を速くする、ということですね。
そのような分散ビルドのソリューションの一つにIncredibuildがあります。このエントリーでは、Windows版Incredibuildを使って分散ビルドがどれだけ効果的なのか試してみました。
Incredibuildのメリット
今回初めて利用しましたが、その際に感じたメリットを挙げてみます。
ビルドはもちろん、それ以外の処理も高速化できる
Incredibuildはマルチプロセス処理を複数のPCに分散させるためのソリューションです。今回はソースコードのビルドで利用しましたが、その他にはテストや機械学習などマルチプロセスが有効に働く処理であれば、なんでも高速に処理できます。
VisualStudio向けプラグインが提供されているため、VisualStudio上での開発では、Incredibuildの存在を意識せずに利用できます。いつものビルドとは違う速度でビルドログが流れていく様は圧巻ですね。
分散ビルドはクラウドサービスも指定可能
その分散ビルド環境は行う自社ネットワーク(オンプレ)に構築するといった他に、AWS、Azure、GoogleCloundなどの各種クラウドサービスに構築することもできます。クラウドサービスを使うと運用が柔軟になるのでお勧めします。
必要な時にだけインスタンスが起動する
今回はAWSに分散ビルド環境を構築してみましたが、「クラウド上に構築すると分散ビルド用インスタンス(=高性能なインスタンス)を常時起動させておかければならないのでは? 運用コストが気になる」と思うかもしれません。
しかし、Incredibuildでは、必要な時だけビルド用インスタンスが起動する仕組みとなってます。
分散ビルドを実行してない時は、ビルド用インスタンスは起動してません(Cloud Machinesが起動中のインスタンスを表示してます)。
分散ビルドを開始すると、ビルド用インスタンスが次々と起動します。分散ビルドが終わると自動的にインスタンスが終了します。
このように、インスタンスのコストが最小限に抑えられる仕組みが既に組み込まれてます。
Incredibuild運用時のサーバ構成
今回Incredibuild環境を構築するにあたり、次の構成で構築しました。AWS側で構築するのはCoordinatorとHelper Agentとなります。また開発用PCにインストールするのはInitiator Agentとなります。
名称 | 概要 |
---|---|
Initiator Agent | Coordinatorにビルド指令を送る。開発環境があるPCにインストールする。 |
Coordinator | Helper Agentを束ねる役割。低スペックなインスタンスが1台あればよい。 |
Helper Agent | ビルド担当。高スペックで複数起動するのが一般的。最低1台は必要。 |
なお、セットアップ方法は、ゲーム開発環境をAWSで!IncrediBuild Cloudを使用してUnreal Engine 4の分散ビルドをやってみた | DevelopersIOで解説していますので、参考にしてください。
UnrealEngine4のソースコードをビルドしてみた
ビルドが速いって、実際どれぐらいよ? という疑問にお答えすべく計測してみました。
いくつかのサーバ構成でUnrealEngine4.26.1のソースコードをフルビルドし終了するまでの時間を計測しました。いずれもHelper Agentは起動していない状況からビルド開始してます。
余談ですが、プライベートでもUE4のソースコードをビルドすることはよくありますが、PCが古いこともあり寝る前に仕掛けて翌朝に結果を確認するといったことを割としています。
サーバ構成
今回は次のようなサーバ構成で構築してみました。
役割 | OS | インスタンス | 台数 |
---|---|---|---|
Coordinator | Windows Server 2019 | t3.small | 1 |
Helper Agent | Windows Server 2016 | c5.4xlarge | 5 |
計測結果
上記のサーバ構成で、ビルドに割り当てるHelper Agentの台数を変えながら時間を計測してみました。
Helper Agent | ビルド時間 |
---|---|
(参考)ノートPC(CPU:i7-1185G7) 1台 | 1時間34分 |
c5.4xlarge x 3台 | 20分35秒 |
c5.4xlarge x 5台 | 17分58秒 |
ビルドが30分掛からずに終わる時点でとても感動してます。気になる方は手元のPCで計測してみるとよいかもしれません。
ビルド中の様子
VisualStudioでのビルド中のログは、どのソースコードのビルドがどのインスタンスに割り当てられているか出力されています。
(TIPS)VisualStudioにはEnglish Language Packをインストールする
English Language Packをインストールせずに利用していると、インストールを強く推奨するとログが表示されました。インストールした後にどのようによくなったのか気づけませんでしたがここは従った方がよい気がします。
VisualStudioInstallerを使ってEnglish Language Packをインストールします。
最後に
普段からPC1台で夜な夜なビルドしている方であれば、Incredibuildがあればかなり開発がはかどるでしょうね。プライベートでも導入したいです...。